#include <iostream>
#include <stdio.h>
using namespace std;
/*
int sprintf(char *str, const char *format, ...);
    功能：将指定的格式串转换为字符串，放入字符数组中
    参数1：字符数组的起始地址
    参数2：格式串，可以包含多个格式控制符
    参数3：可变参数
    返回值：成功返回转换的字符个数，失败返回EOF

    对于上述函数而言，用一个小的容器去存储一个大的转换后的字符时，会出现指针越界的段错误，为
    了安全起见，引入了snprintf

int snprintf(char *str, size_t size, const char *format, ...);
    功能：将格式串中最多size-1个字符转换为字符串，存放到字符数组中
    参数1：字符数组的起始地址
    参数2：要转换的字符个数，最多为size-1
    参数3：格式串，可以包含多个格式控制符
    参数4：可变参数
    返回值：如果转换的字符小于size时，返回值就是成功转换字符的个数，如果大于size则只转换
            size-1个字符，返回值就是size，失败返回EOF
*/
int main(int argc, const char *argv[])
{
    char buf[10] = ""; // 定义一个字符串容器
    // 需求：将多种数据类型的数据连接成一个字符串，放入字符数组中
    // sprintf(buf, "%d %s %lf", 1001, "zhangsanfeng", 99.5);
    // 安全起见，我们使用snprintf
    snprintf(buf, sizeof(buf), "%d %s %lf", 1001, "zhangsanfeng", 99.5);
    // 输出转换后的字符串
    printf("buf = %s\n", buf); // 1001 zhangsanfeng 99.500000
    return 0;
}
